package rbac.View.Main.Service.array;

import rbac.View.Main.DoMain.Dto.BaseDto;
import rbac.View.Main.DoMain.Entity.BaseEntity;
import rbac.View.Main.DoMain.Vo.BaseVo;
import rbac.View.Main.DoMain.Vo.Result;
import rbac.View.Main.Service.IBaseService;

abstract class BaseService <Entity extends BaseEntity,
        Dto extends BaseDto,
        Vo  extends BaseVo> implements IBaseService<Entity,Dto> {
    static final int DATA_SIZE=100;

    Entity[] data;
    Vo[] temp;

    private int idCounter=1;
    @Override
    public boolean existsById(int id) {
        return id < 1 || id >= idCounter || data[id] == null;
    }

    @Override
    public Entity findById(int id) {
        if(existsById(id)){
            return data[id];
        }
        return null;
    }

    abstract Vo convertToVo(Entity entity);
    @Override
    public Result list() {
        int length=0;
        for(int i=1;i<idCounter;i++){
            if(data[i]!=null){
                temp[length++]=convertToVo(data[i]);
            }
        }
        return null;
    }

    abstract Entity createEntity(Dto dto,int id);
    @Override
    public Result create(Dto dto) {
        if(idCounter>DATA_SIZE){
            return Result.faliure("创建失败，超出了存储容量");
        }
        Entity entity =createEntity(dto,idCounter++);
        data[entity.getId()]=entity;
        return Result.success("创建成功",null);
    }

    abstract void updateEntity(Dto dto,Entity entity);
    @Override
    public Result update(Dto dto, int id) {
        if(existsById(id)){
            return Result.faliure("更新失败，不存在该数据");
        }
        Entity entity=data[id];
        updateEntity(dto,entity);
        return Result.success("更新成功",null);
    }
}

